﻿// 131. 直方图中最大的矩形.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <algorithm>
#include <stack>
#include <memory.h>


using namespace std;

//https://www.acwing.com/problem/content/133/
//直方图是由在公共基线处对齐的一系列矩形组成的多边形。
//
//矩形具有相等的宽度，但可以具有不同的高度。
//
//例如，图例左侧显示了由高度为 2, 1, 4, 5, 1, 3, 3 的矩形组成的直方图，矩形的宽度都为 1：
//
//2559_1.jpg
//
//通常，直方图用于表示离散分布，例如，文本中字符的频率。
//
//现在，请你计算在公共基线处对齐的直方图中最大矩形的面积。
//
//图例右图显示了所描绘直方图的最大对齐矩形。
//
//输入格式
//输入包含几个测试用例。
//
//每个测试用例占据一行，用以描述一个直方图，并以整数 n 开始，表示组成直方图的矩形数目。
//
//然后跟随 n 个整数 h1，…，hn。
//
//这些数字以从左到右的顺序表示直方图的各个矩形的高度。
//
//每个矩形的宽度为 1。
//
//同行数字用空格隔开。
//
//当输入用例为 n = 0 时，结束输入，且该用例不用考虑。
//
//输出格式
//对于每一个测试用例，输出一个整数，代表指定直方图中最大矩形的区域面积。
//
//每个数据占一行。
//
//请注意，此矩形必须在公共基线处对齐。
//
//数据范围
//1≤n≤100000,
//0≤hi≤1000000000
/*
//输入样例：
7 2 1 4 5 1 3 3
4 1000 1000 1000 1000
0
输出样例：
8
4000
*/


const int N = 100010;
long long arr[N];
int n;

void solve() {
	long long ans = 0;
	stack<long long> st;
	int larr[N]; int rarr[N];
	memset(larr, -1, sizeof larr); memset(rarr, -1, sizeof rarr);
	for (int i = n; i >= 1; i--) {
		int curr = arr[i];
		while (!st.empty() && curr <= arr[st.top()]) st.pop();
		if (st.empty()) { rarr[i] = -1; }
		else { rarr[i] = st.top(); }
		st.push(i);
	}

	while (!st.empty()) st.pop();

	for (int i = 1; i <=n; i++) {
		int curr = arr[i];
		while (!st.empty() && curr <= arr[st.top()]) st.pop();
		if (st.empty()) { larr[i] = -1; }
		else { larr[i] = st.top(); }
		st.push(i);
	}
 
	for (int i = 1; i <= n; i++) {
		int l = larr[i]+1; int r = rarr[i]-1;
		if (larr[i] == -1) l = 1;
		if (rarr[i] == -1) r = n ;
		ans = max(ans,(r-l+1)*arr[i]);
	}
	cout << ans << endl;
	return;
}


int main()
{
	while (cin >> n) {
		if (n == 0) { break; }
		memset(arr, 0, sizeof arr);
		for (int i = 1; i <= n; i++) {
			cin >> arr[i];
		}
		solve();
   }


	return 0;
}
